//
// Created by LiuYou on 2021/7/3.
//

#ifndef LINUXENVIRONMENTPROGRAMMING_RELAYER_HPP
#define LINUXENVIRONMENTPROGRAMMING_RELAYER_HPP


#include <cinttypes>



// TODO 注意: 重要: 在头文件中我们暴露给用户使用的数据结构既类类型, 其实可以不是我们要使用的
//  数据结构。 我想让用户看到一部分就看到一部分, 不想让用户看到的, 我在*.cpp中。半隐藏半公开。
//  用户还是不知道设计库的人使用到的真正的数据类型。


#define REL_JOB_MAX     10000


enum {
    STATE_RUNNING,
    STATE_CANCEL,
    STATE_OVER
};

struct RelayerState {
    int state;
    int fd1;
    int fd2;
    int64_t count12;
    int64_t count21;
//struct timerval
};


/*
 * return   >=  0           调用成功, 返回当前任务ID
 *          ==  -EINVAL     调用失败, 参数非法
 *          ==  -ENOSPC     调用失败, 任务数组以满
 *          ==  -ENOMEM     调用失败, 内存分配有误
 */
int relAddJob(int fd1, int fd2);


/*
 * return   ==  0           调用成功, 指定任务取消
 *          ==  -EINVAL     调用失败, 参数非法
 *          ==  -EBUSY      调用失败, 任务早已被取消
 */
int relCanCelJob(int id);


/*
 * return   ==  0           调用成功, 指定任务已终止, 并返回状态。
 *          == -EINVAL      调用失败, 参数非法
 */
int relWaitJob(int id, struct RelayerState*);


/*
 * return   ==  0           调用成功, 指定任务状态已经返回
 *          ==  -EINVAL     调用失败, 参数非法
 */
int relStateJob(int id, struct RelayerState*);




























//class Relayer {
//
//};


#endif //LINUXENVIRONMENTPROGRAMMING_RELAYER_HPP
